import { Attachment } from './Attachment'

/**
 * 工序实体类型定义
 */
export interface Process {
  /** 工序ID */
  id: number;
  
  /** 工序编号 */
  processCode: string;
  
  /** 工序名称 */
  processName: string;
  
  /** 工序分类ID */
  processClassificationId: number;
  
  /** 工序分类名称 */
  processClassificationName?: string;
  
  /** 部门ID */
  departmentId: number;
  
  /** 部门名称 */
  departmentName?: string;
  
  /** 负责人 */
  responsiblePerson: string;
  
  /** 描述 */
  description?: string;
  
  /** 排序 */
  sortOrder: number;
  
  /** 标准时间（分钟） */
  standardTime: number;
  
  /** 是否启用 */
  isEnabled: boolean;
  
  /** 创建时间 */
  createTime: string;
  
  /** 创建人 */
  createName: string;
  
  /** 修改时间 */
  updateTime?: string;
  
  /** 修改人 */
  updateName?: string;
  
  /** 是否删除 */
  isDeleted?: boolean;
  
  /** 附件列表 */
  attachments?: Attachment[];
}

/**
 * 工序查询参数类型
 */
export interface ProcessQueryParams {
  /** 工序名称（模糊查询） */
  processName?: string;
  
  /** 页码 */
  pageIndex: number;
  
  /** 页大小 */
  pageSize: number;
}

/**
 * 工序显示扩展DTO类型
 */
export interface ProcessShowExtendDTO {
  /** 工序ID */
  id: number;
  
  /** 工序编号 */
  processCode: string;
  
  /** 工序名称 */
  processName: string;
  
  /** 工序分类ID */
  processClassificationId: number;
  
  /** 工序分类名称 */
  processClassificationName: string;
  
  /** 部门ID */
  departmentId: number;
  
  /** 部门名称 */
  departmentName: string;
  
  /** 负责人 */
  responsiblePerson: string;
  
  /** 描述 */
  description: string;
  
  /** 排序 */
  sortOrder: number;
  
  /** 标准时间（分钟） */
  standardTime: number;
  
  /** 是否启用 */
  isEnabled: boolean;
  
  /** 创建时间 */
  createTime: string;
  
  /** 创建人 */
  createName: string;
}

/**
 * 工序分页响应类型
 */
export interface ProcessPageResponse {
  /** 响应代码 */
  code: number;
  
  /** 响应消息 */
  message: string;
  
  /** 响应数据 */
  data: {
    /** 总数 */
    totalCount: number;
    
    /** 页数 */
    pageCount: number;
    
    /** 页面数据 */
    pageData: ProcessShowExtendDTO[];
  };
}

/**
 * 工序新增/修改请求类型
 */
export interface ProcessRequest {
  /** 工序ID（修改时使用） */
  id?: number;
  
  /** 工序编号 */
  processCode: string;
  
  /** 工序名称 */
  processName: string;
  
  /** 工序分类ID */
  processClassificationId: number;
  
  /** 部门ID */
  departmentId: number;
  
  /** 负责人 */
  responsiblePerson: string;
  
  /** 描述 */
  description?: string;
  
  /** 排序 */
  sortOrder?: number;
  
  /** 标准时间（分钟） */
  standardTime?: number;
  
  /** 是否启用 */
  isEnabled?: boolean;
  
  /** 附件列表 */
  attachments?: Attachment[];
}

/**
 * 工序导出参数类型
 */
export interface ProcessExportParams {
  /** 选中的工序ID列表 */
  selectedIds: number[];
  
  /** 是否导出所有数据 */
  exportAll: boolean;
  
  /** 工序名称（用于筛选） */
  processName?: string;
}

/**
 * 工序分类类型定义
 */
export interface ProcessClassification {
  /** 分类ID */
  id: number;
  
  /** 分类编号 */
  classificationCode: string;
  
  /** 分类名称 */
  classificationName: string;
  
  /** 分类描述 */
  description?: string;
  
  /** 排序 */
  sortOrder: number;
  
  /** 是否启用 */
  isEnabled: boolean;
  
  /** 创建时间 */
  createTime: string;
  
  /** 创建人 */
  createName: string;
  
  /** 修改时间 */
  updateTime?: string;
  
  /** 修改人 */
  updateName?: string;
  
  /** 是否删除 */
  isDeleted?: boolean;
}

/**
 * 部门类型定义
 */
export interface Department {
  /** 部门ID */
  id: number;
  
  /** 部门编号 */
  departmentNumber: string;
  
  /** 部门名称 */
  departmentName: string;
  
  /** 部门描述 */
  departmentDescription?: string;
  
  /** 上级部门ID */
  parentDepartmentId?: number;
  
  /** 部门经理ID */
  departmentManagerId?: number;
  
  /** 部门类型 */
  departmentType?: string;
  
  /** 部门级别 */
  departmentLevel?: number;
  
  /** 排序 */
  sortOrder: number;
  
  /** 是否启用 */
  isEnabled: boolean;
  
  /** 是否系统部门 */
  isSystemDepartment?: boolean;
  
  /** 部门经理姓名 */
  departmentManagerName?: string;
  
  /** 联系电话 */
  contactPhone?: string;
  
  /** 地址 */
  address?: string;
  
  /** 备注 */
  remarks?: string;
  
  /** 创建时间 */
  createTime: string;
  
  /** 创建人 */
  createName: string;
  
  /** 修改时间 */
  updateTime?: string;
  
  /** 修改人 */
  updateName?: string;
  
  /** 是否删除 */
  isDeleted?: boolean;
}

/**
 * 工序状态枚举
 */
export enum ProcessStatus {
  /** 启用 */
  ENABLED = true,
  
  /** 禁用 */
  DISABLED = false
}

/**
 * 工序状态文本映射
 */
export const PROCESS_STATUS_TEXT = {
  [ProcessStatus.ENABLED]: '启用',
  [ProcessStatus.DISABLED]: '禁用'
}

/**
 * 工序状态标签类型映射
 */
export const PROCESS_STATUS_TAG_TYPE = {
  [ProcessStatus.ENABLED]: 'success',
  [ProcessStatus.DISABLED]: 'danger'
}

/**
 * 工序表单验证规则
 */
export const PROCESS_FORM_RULES = {
  processCode: [
    { required: true, message: '请输入工序编号', trigger: 'blur' },
    { min: 2, max: 50, message: '工序编号长度在 2 到 50 个字符', trigger: 'blur' }
  ],
  processName: [
    { required: true, message: '请输入工序名称', trigger: 'blur' },
    { min: 2, max: 100, message: '工序名称长度在 2 到 100 个字符', trigger: 'blur' }
  ],
  processClassificationId: [
    { required: true, message: '请选择工序分类', trigger: 'change' }
  ],
  departmentId: [
    { required: true, message: '请选择所属部门', trigger: 'change' }
  ],
  responsiblePerson: [
    { required: true, message: '请输入负责人', trigger: 'blur' },
    { max: 50, message: '负责人长度不能超过 50 个字符', trigger: 'blur' }
  ],
  description: [
    { max: 500, message: '描述长度不能超过 500 个字符', trigger: 'blur' }
  ],
  sortOrder: [
    { type: 'number', min: 1, message: '排序必须大于 0', trigger: 'blur' }
  ],
  standardTime: [
    { type: 'number', min: 0, message: '标准时间不能小于 0', trigger: 'blur' }
  ]
}

/**
 * 工序搜索表单类型
 */
export interface ProcessSearchForm {
  /** 工序名称（用于模糊搜索） */
  processName?: string;
}

/**
 * 工序分页参数类型
 */
export interface ProcessPagination {
  /** 当前页码 */
  pageIndex: number;
  
  /** 页大小 */
  pageSize: number;
  
  /** 总数 */
  total: number;
}

/**
 * 工序操作类型枚举
 */
export enum ProcessOperationType {
  /** 新增 */
  ADD = 'add',
  
  /** 编辑 */
  EDIT = 'edit',
  
  /** 删除 */
  DELETE = 'delete',
  
  /** 查看 */
  VIEW = 'view',
  
  /** 导出 */
  EXPORT = 'export'
}

/**
 * 工序操作记录类型
 */
export interface ProcessOperationLog {
  /** 操作ID */
  id: number;
  
  /** 工序ID */
  processId: number;
  
  /** 操作类型 */
  operationType: ProcessOperationType;
  
  /** 操作描述 */
  operationDescription: string;
  
  /** 操作前数据 */
  beforeData?: any;
  
  /** 操作后数据 */
  afterData?: any;
  
  /** 操作人 */
  operator: string;
  
  /** 操作时间 */
  operationTime: string;
  
  /** 操作IP */
  operationIp?: string;
  
  /** 备注 */
  remarks?: string;
}
